package com.powerflasher.SampleApp{
	import org.flixel.*;
	/**
	 * @author Eros Esp�nola
	 */
	public class Nivel1_2 extends FlxState{
		[Embed(source = "brick_tiles_1.png")] public static var bricks:Class;
		[Embed(source = "6.png")] public static var clouds:Class;
		[Embed(source = "map1_2_1.csv", mimeType = "application/octet-stream")] public static var mapa:Class;
		[Embed(source = "map1_2_2.csv", mimeType = "application/octet-stream")] public static var mapaElastico:Class;
		
		private var helicoptero:Helicoptero;
		private var bala1:Bala;
		private var bala2:Bala;
		private var bala3:Bala;
		private var bala4:Bala;
		
		private var red:Red;
		private var jugador:Jugador;
		private var map:FlxTilemap;
		private var mapElastic:FlxTilemap;
		private var t:Number = 0;
		private var caja:Box;

		
		private var cielo:sky;
		private var paused:Boolean;
		private var texto:FlxText;
		
		public function Nivel1_2(){
        	super();
			
        }
		
		override public function create():void{
            jugador = new Jugador(295,1150);
			helicoptero=new Helicoptero(100, 900);
			
			bala1 = new Bala(0,0,0,0,0);
			bala2 = new Bala(0,0,0,0,0);
			bala3 = new Bala(0,0,0,0,0);
			bala4 = new Bala(0,0,0,0,0);
			
			red = new Red(0,0,0,0,0);
			caja = new Box(200, 90);
			caja.acceleration.y = 1000;
			cielo=new sky(0, 0);
			
			
			map=new FlxTilemap();
			map.loadMap(new mapa(), bricks, 32, 32);

			map.setTileProperties(14, FlxObject.UP);
			map.setTileProperties(15, FlxObject.UP);
			
			mapElastic=new FlxTilemap();
			mapElastic.loadMap(new mapaElastico(), bricks,32,32);
			
			mapElastic.setTileProperties(7, FlxObject.UP);
			mapElastic.setTileProperties(9, FlxObject.UP);
			mapElastic.setTileProperties(11, FlxObject.UP);
			
			paused = false;
			texto=new FlxText(0, 340, FlxG.width, "PAUSED GAME").setFormat(null, 65, 0xFFFFFF, "center");
			texto.kill();
			
			add(cielo);
			add(map);
			add(mapElastic);
			add(jugador);
			add(bala1);
			add(bala2);
			add(bala3);
			add(bala4);
			add(helicoptero);
			add(caja);
			add(texto);
			
			FlxG.worldBounds = new FlxRect(0, 0, 640, 1680);
			FlxG.camera.y -= 400;
			FlxG.camera.target=jugador;	
			FlxG.camera.follow(jugador);
			FlxG.camera.setBounds(0,-254,640,2000);
		}
		
		override public function update():void{
			if(FlxG.keys.justPressed("P"))
				paused = !paused;
			if(!paused)
				texto.kill();
			if(paused){
				texto.y=jugador.y-340;
				texto.revive();
				return;
			}
			
			super.update();
			if(FlxG.keys.pressed("RIGHT")&&jugador.x<590){
				jugador.x = jugador.x+2;
				jugador.play("derecha");
			}
			if(FlxG.keys.pressed("LEFT")&&jugador.x>0){
				jugador.x = jugador.x-2;
				jugador.play("izquierda");
			}
			if(FlxG.keys.justPressed("UP") /*&& (FlxG.collide(jugador,map))*/){
				jugador.velocity.y = -380;
				jugador.y -= 30;
				jugador.play("arriba");	
			}
			if((FlxG.collide(jugador,mapElastic))){
				jugador.velocity.y = -500;
				jugador.y -= 100;
				jugador.play("arriba");	
			}
			if(FlxG.collide(jugador, bala1) || FlxG.collide(jugador, bala2) || FlxG.collide(jugador, bala3) ||FlxG.collide(jugador, bala4) ||FlxG.collide(jugador, red)){
				jugador.kill();
				bala1.kill();
				bala2.kill();
				bala3.kill();
				bala4.kill();
				red.kill();
				FlxG.switchState(new Nivel1_2());
			}
			////////////
			//Helicoptero sigue al personaja hacia arriba
			if(jugador.y < helicoptero.y + 70 && jugador.y > 450){
				helicoptero.y -=3;
			}
			//Helicoptero sigue al personaja hacia arriba
			if(jugador.y < helicoptero.y - 150 && jugador.y < 350){
				helicoptero.y -=3;
			}
			//Helicoptero sigue al personaje hacia abajo
			if(jugador.y > helicoptero.y + 70 && ((jugador.y > 450 && jugador.y < 1000) || jugador.y < 350)){
				helicoptero.y +=3;
			}
			if(FlxG.collide(caja, helicoptero)){
				helicoptero.kill();
				caja.kill();
				FlxG.switchState(new Nivel2_1());
			}
			
			t+=FlxG.elapsed;
			
			//Mueve el helicoptero en diagonal en la parte superior
			if(jugador.x <550 && jugador.y < 350){
				if(helicoptero.x > 0){
					helicoptero.x -=2;
				}
				if(helicoptero.y >350){
					helicoptero.y -=1;
				}
			}
			
			//Lanza la red
			if(jugador.x > 520 && jugador.y > 350 && jugador.y < 450 && t>=1.0){
				red = helicoptero.red(300,helicoptero.y,70,300,0);
				add(red);
			}
			
			////////////
			//t+=FlxG.elapsed;
			if(t>=1.0 && (helicoptero.y >450 || helicoptero.y < 400)){
				bala4 = bala3;
				bala3 = bala2;
				bala2 = bala1;
				bala1 = helicoptero.fire(helicoptero.x + 120,helicoptero.y + 110,10,(jugador.x - helicoptero.x) -120,(jugador.y-helicoptero.y)- 110);
				
				add(bala1);
				add(bala2);
				add(bala3);
				add(bala4);
				/*
				bala = helicoptero.fire(helicoptero.x + 120,helicoptero.y + 100,10,-250,0);
				add(bala);
				bala2 = helicoptero.fire(helicoptero.x + 120,helicoptero.y + 100,10,250,0);
				add(bala2);
				*/
			}
			if(t>=1.0){
				t=0;
			}
			
			if(jugador.y<128){
				FlxG.switchState(new Nivel2_1());
			}
			
			FlxG.collide(jugador,map);	
			FlxG.collide(jugador,mapElastic);
			FlxG.collide(caja,map);
			FlxG.collide(caja,mapElastic);
			FlxG.collide(caja, jugador);	
				
			jugador.acceleration.y = 1000;
		}
	}
}
